package com.note.enumEntity;



/**
 * 常用类型(带参数的枚举常量，这个只是在书上不常见，实际使用还是很多的，看懂这个，使用就不是问题啦。)
 */
public enum TYPE {
    //
    FIREWALL("firewall"),
    //
    SECRET("secretMac"),
    //
    BALANCE("f5");


    private String typeName;

    TYPE(String typeName) {
        this.typeName = typeName;
    }

    /**
     * 根据类型的名称，返回类型的枚举实例。
     *
     * @param typeName 类型名称
     */
    public static TYPE fromTypeName(String typeName) {
        for (TYPE type : TYPE.values()) {
            if (type.getTypeName().equals(typeName)) {
                return type;
            }
        }
        return null;
    }

    public String getTypeName() {
        return this.typeName;
    }

    /*

     */
    public static void main(String[] args) {
        for (SimpleEnum simpleEnum : SimpleEnum.values()) {
            System.out.println(simpleEnum + "  ordinal  " + simpleEnum.ordinal());
        }
        System.out.println("------------------");
        for (TYPE type : TYPE.values()) {
            System.out.println("type = " + type + "    type.name = " + type.name() + "   typeName = " + type.getTypeName() + "   ordinal = " + type.ordinal());
        }
    }

    /**
     * switch case 的用法
     */
    private static void testSwitchCase() {
        String typeName = "f5";
        //这几行注释呢，你可以试着三选一，测试一下效果。
        //String typeName = "firewall";
        //String typeName = "secretMac";
        TYPE typeEnum = TYPE.fromTypeName(typeName);
        if (typeEnum == null) {
            return;
        }
        switch (typeEnum) {
            case FIREWALL:
                System.out.println("枚举名称(即默认自带的属性 name 的值)是：" + typeEnum.name());
                System.out.println("排序值(默认自带的属性 ordinal 的值)是：" + typeEnum.ordinal());
                System.out.println("枚举的自定义属性 typeName 的值是：" + typeEnum.getTypeName());
                break;
            case SECRET:
                System.out.println("枚举名称(即默认自带的属性 name 的值)是：" + typeEnum.name());
                System.out.println("排序值(默认自带的属性 ordinal 的值)是：" + typeEnum.ordinal());
                System.out.println("枚举的自定义属性 typeName 的值是：" + typeEnum.getTypeName());
                break;
            case BALANCE:
                System.out.println("枚举名称(即默认自带的属性 name 的值)是：" + typeEnum.name());
                System.out.println("排序值(默认自带的属性 ordinal 的值)是：" + typeEnum.ordinal());
                System.out.println("枚举的自定义属性 typeName 的值是：" + typeEnum.getTypeName());
                break;
            default:
                System.out.println("default");
        }
    }
    /**
     * 在Java代码使用枚举
     */
    private static void useEnumInJava() {
        String typeName = "f5";
        TYPE type = TYPE.fromTypeName(typeName);
        if (TYPE.BALANCE.equals(type)) {
            System.out.println("根据字符串获得的枚举类型实例跟枚举常量一致");
        } else {
            System.out.println("大师兄代码错误");
        }

    }

    /**
     * 季节枚举(不带参数的枚举常量)这个是最简单的枚举使用实例
     * Ordinal 属性，对应的就是排列顺序，从0开始。
     */
    private enum SimpleEnum {
        //
        SPRING,
        SUMMER,
        AUTUMN,
        WINTER
    }

}